/**
 * 
 */
package pruebas.tiendaOl.dominio;

import iades.fabricaciones.UnidadTrabajo;
import iades.fabricaciones.UnidadTrabajo.Nueva;

import java.io.Serializable;
import java.util.logging.Logger;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.inject.Alternative;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;

/**Una instancia X de esta clase conoce la {@link UnidadTrabajo} compartida por los objetos en el contexto donde yace X. 
 * @author ggpollit
 * @deprecated cuando se decidió usar siempre {@link ConversationScoped} para emmarcar la instancia de {@link UnidadTrabajo}. Al menos hasta que cree el nuevo contexto "EnmarcadoPorUnidadTrabajo" 
 */
@ConversationScoped
@Alternative
public abstract class SustentadorUnidadTrabajo implements Serializable {
	
	@Inject
	@Nueva
	private UnidadTrabajo unidadTrabajo;
	
	/**IMPORTANTE: El scope de este productor debe ser igual al scope de esta clase. */
	@Produces
	@ConversationScoped
	public UnidadTrabajo getUnidadTrabajo() {
		return this.unidadTrabajo;
	}
	
	@PreDestroy
	void preDestroy() {
		logger.info("preDestroy SustentadorUnidadTrabajo#"+ System.identityHashCode(this));
		unidadTrabajo.inutilizar();
	}	


	//// Debug ////
	@Inject
	private Logger logger;
	@PostConstruct
	void postConstruct() {
		logger.info("postConstruct SustentadorUnidadTrabajo#" + System.identityHashCode(this));
	}
}
